# zip() 是一个内置函数，用于将多个可迭代对象（如列表、元组等）中的元素
# 按照对应位置配对，生成一个 zip 对象（迭代器）。
# 这个 zip 对象可以逐个生成配对后的元组，而不会立即占用大量内存。

# 变量 zipped 表示 zip() 函数返回的 zip 对象。
# 例如，list1 和 list2 分别是 [1, 2, 3] 和 ['a', 'b', 'c']，
# 使用 zip(list1, list2) 后，zipped 会生成以下元组：
# (1, 'a'), (2, 'b'), (3, 'c')，但这些元组是按需生成的。
# 你可以通过 list(zipped) 将其转换为列表以查看所有内容。


# 示例：将两个列表合并为一个包含元组的列表
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

# 使用 zip 将两个列表配对
zipped = zip(list1, list2)

print("--- zip() 返回的是一个 zip 对象（迭代器） ---")
print(zipped)

print(type(zipped))  # 打印 zip 对象的类型

print("--- 转换为列表并打印 ---")
print(list(zipped))

print("--- 示例：解压缩 ---")
zipped = zip(list1, list2)
# 在 zip(*zipped) 中，* 是解包操作符，用于将 zipped 中的每个元组解包为独立的参数。
# 例如，如果 zipped 是 [(1, 'a'), (2, 'b'), (3, 'c')]，
# 那么 zip(*zipped) 等价于 zip((1, 2, 3), ('a', 'b', 'c'))。
# 这会将原来的配对关系解压缩为两个独立的可迭代对象。
unzipped = zip(*zipped)
print(list(unzipped))

# zip() 可以接受多个可迭代对象作为参数，而不仅仅是两个。
# 示例：将三个列表合并为一个包含元组的列表
list3 = [True, False, True]
zipped_multiple = zip(list1, list2, list3)
print("--- zip() 接受多个参数 ---")
print(list(zipped_multiple))

# 如果传入的可迭代对象长度不同，zip() 会以最短的可迭代对象为准。
list4 = [100, 200]
zipped_short = zip(list1, list4)
print("--- zip() 以最短的可迭代对象为准 ---")
print(list(zipped_short))

# 示例：使用 dict(zip()) 创建字典
keys = ['name', 'age', 'gender']
values = ['Alice', 25, 'Female']
dictionary = dict(zip(keys, values))
print("--- 使用 dict(zip()) 创建字典 ---")
print(dictionary)




